package mason.dp.singleton;

/**
 * “双重检查加锁”单例模式，JDK1.5版本以上支持，并发调用没问题，反射模式下会失效
 * 参考：http://blog.csdn.net/guolin_blog/article/details/8860649
 * @author MasonAir
 *
 */
public class DoubleCheckLocking {
	//volatile关键词确保当instance变量被初始化成DoubleCheckLocking实例时，多个线程正确地处理instance变量
	private volatile static DoubleCheckLocking instance;

	private DoubleCheckLocking() {
	};

	public static DoubleCheckLocking getInstance() {
		// 使其仅在第一次赋值时进行同步锁
		if (instance == null) {
			synchronized (DoubleCheckLocking.class) {
				if (instance == null) {
					instance = new DoubleCheckLocking();
				}
			}
		}
		return instance;
	}

}
